package com.lancer.jvm.oom;

import java.util.ArrayList;
import java.util.List;

/**
 * 设置方法区大小，尽快报错（1.8以下使用）
 *  VM Args：-XX:PermSize=10M -XX:MaxPermSize=10M
 *  设置元空间大小，（1.8及以上用）1。8以上下面代码无法导致内存溢出，可以使用jdk动态加载技术，例如cglib动态的生成大量的数据来达到
 *  VM Args：-XX:MetaspaceSize=1M -XX:MaxMetaspaceSize=1M
 * @Author lancer
 */
public class RuntimeConstantPoolOOM {


       public static void main(String[] args) {
           //使用List保持着常量池引用，避免Full GC回收常量池行为
           List<String> list = new ArrayList<String>();
           //10MB的PermSize在integer范围内足够产生OOM了
           int i = 0;
           while (true) {
               list.add(String.valueOf(i++));
           }
       }

}
